/**
 *
 * @description: axios二次封装
 * @author: junyong.hong
 * @createTime: 2018/5/23
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
import axios from 'axios'
// sha1请求线上的地址
const sha1 = require('sha1')

// 添加请求路径前缀
axios.defaults.baseURL = 'https://d.apicloud.com/mcm/api'

const appId = 'A6070293659447'
const appKey = '38D07E96-035C-77D2-7E63-5A72F4EFD61E'
const now = Date.now()
/**
 * 返回状态判断(添加请求拦截器)
 */
axios.interceptors.request.use(config => {
  // 请求头
  config.headers = {
    'X-APICloud-AppId': appId,
    'X-APICloud-AppKey': `${sha1(`${appId}UZ${appKey}UZ${now}`)}.${now}`
  };

  return config
}, err => {
  return Promise.reject(err)
});

/**
 * 返回状态判断(添加响应拦截器)
 */
axios.interceptors.response.use(response => {
  return response
}, err => {
  if (err && err.response) {
    switch (err.response.status) {
      case 404:
        // this.$router.push({path: ''})
        err.message = '未找到文件'
        break;
      case 500:
        err.message = '服务器内部错误'
        break;
      default:
        err.message = `连接错误${err.response.status}`
    }
  } else {
    err.message = '网络异常'
  }
  return Promise.reject(err.message)
});

const http = {
  /**
   * get请求方法
   * 调用：
   *  var params = { id: id }
   *  this.$get('url', params).then((response) => {  })
   * @param url 地址
   * @param params 参数
   * @returns {Promise}
   */
  get: function (url, params = {}) {
    return new Promise((resolve, reject) => {
      axios.get(url, {
        params: params
      })
        .then(response => {
          resolve(response.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  },
  /**
   * post请求方法
   * 调用：
   *  var data = { id: id }
   *  this.$post('url', data).then((response) => {  })
   * @param url 地址
   * @param data 参数
   * @returns {Promise}
   */
  post: function (url, data = {}) {
    return new Promise((resolve, reject) => {
      axios.post(url, data)
        .then(response => {
          resolve(response.data)
        }, err => {
          reject(err)
        })
    })
  },
  /**
   * put请求方法
   * 调用：
   *
   *  this.$put(url, data).then((response) => {  })
   * @param url 地址
   * @param data 参数
   * @returns {Promise}
   */
  put: function (url, data = {}) {
    return new Promise((resolve, reject) => {
      axios.put(url, data)
        .then(response => {
          resolve(response.data)
        }, err => {
          reject(err)
        })
    })
  },
  /**
   * delete请求方法
   * @param url 地址
   * @param data 参数
   * @returns {Promise}
   */
  delete: function (url, data = {}) {
    return new Promise((resolve, reject) => {
      axios.delete(url, data)
        .then(response => {
          resolve(response.data)
        }, err => {
          reject(err)
        })
    })
  }
};

export default http
